package com.chif.goingplus.controller;

import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
import com.alibaba.fastjson.JSON;
import com.chif.goingplus.dao.FileMapper;
import com.chif.goingplus.excel.OrderDataListener;
import com.chif.goingplus.pojo.OrderData;
import com.chif.goingplus.utils.ExcelDataUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.util.List;

@CrossOrigin
@RestController
@RequestMapping("/file")
public class FileController {

    @Autowired
    private FileMapper fileMapper;

    /**
     * 1.获取传递过来的CommonsMultipartFile文件
     * 2.保存文件到(上传路径)服务器
     * 3.使用EasyExcel读取Excel文件，并调用Listenter进行数据库数据的导入
     * @param file
     * @return
     * @throws IOException
     */
    @RequestMapping("/upload")
    public String uploadExcel(@RequestParam("file") MultipartFile file) throws IOException {
        //获取文件名 : file.getOriginalFilename();
        String uploadFileName = file.getOriginalFilename();
        /**
         *   使用springmvc中的CommonsMultipartFile进行文件的保存
         */
        //上传路径保存设置(项目上线请修改这里---！！！)
        String path = "D:\\谷歌下载\\GO+订单\\";
        File realPath = new File(path);
        if (!realPath.exists()){
            realPath.mkdir();
        }
        //上传文件地址
       // System.out.println("上传文件保存地址："+realPath);
        //通过CommonsMultipartFile的方法直接写文件（注意这个时候）
        String[] split = uploadFileName.split("\\.");
        String fileString = ExcelDataUtils.getDateString(split[0]);
        String fileName=fileString+"."+split[1];
        file.transferTo(new File(realPath +"/"+ fileName));

        /**
         * 使用EasyExcel读取Excel文件 进行数据的导入
         */
        EasyExcel.read(path+fileName, OrderData.class, new OrderDataListener(fileMapper)).sheet().doRead();

        //返回文件名
        return uploadFileName;
    }



    String PATH="D:\\谷歌下载\\Go+导出\\";

    /**
     * 将传递过来的JSON字符串转换成OrderData类型的List集合使用在Excel doWrite()导出中
     * @param orderDatas
     * @return
     */
    @RequestMapping("/download")
    public String downloadExcel(String orderDatas) {
        // 写法1
        String fileName = PATH+ ExcelDataUtils.getDateString("go+订单模板") +".xlsx";
        // 这里 需要指定写用哪个class去写，然后写到第一个sheet，名字为模板 然后文件流会自动关闭
        // write(fileName, 格式类)
        //sheet (表名)
        //doWrite(数据)
        List orderList = JSON.parseArray(orderDatas,OrderData.class);
        EasyExcel.write(fileName, OrderData.class).registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()).sheet("模板").doWrite(orderList);
        return PATH;
    }
}
